<?php

Yii::import('application.modules.nutricion.models._base.BaseMedidas');

class Medidas extends BaseMedidas {

    const cantidadMedidaDefaultSistema = 100;
    const descripcionMedidaDefaultSistema = "1 porci&oacute;n";

    /**
     * @return Medidas
     */
    public static function model($className = __CLASS__) {
        return parent::model($className);
    }

    public static function label($n = 1) {
        return Yii::t('app', 'Medida|Medidas', $n);
    }

    /**
     * Funcion que permite recuperar las medidas de acuerdo a la categoria
     * @author Sofia Mejia <asmejia@utn.edu.ec>
     * @param int $id de la caetogria seleccionada
     * @return \Medidas
     */
    public function de_categoria_id($id) {
        $this->getDbCriteria()->mergeWith(
                array(
                    'condition' => 't.categoria_id=:categoria_id',
                    'params' => array(
                        ':categoria_id' => $id,
                    )
                )
        );
        return $this;
    }

    /**
     * Busca si la tabla del modelo no esta vacia
     * @author Sofia Mejia <asmejia@utn.edu.ec>
     * @return query
     */
    public function contarDatos() {
        $command = Yii::app()->db->createCommand()
                ->select("count(id) as total")
                ->from($this->tableName());
        $result = $command->queryAll();
        return $result[0]['total'];
    }

    /**
     * @return array customized attribute labels (name=>label)
     */
    public function attributeLabels() {
        return array(
            'cantidad_g' => Yii::t('app', 'Cantidad (g)'),
            'descripcion' => Yii::t('app', 'Descripci&oacute;n'),
            'categoria_id' => Yii::t('app', 'Categor&iacute;a'),
        );
    }

    public function rules() {
        return array_merge(parent::rules(), array(
            array('cantidad_g', 'uniqueMedidaCategoria'),
        ));
    }

    /**
     * Permite validar que se ingrese una sola vez una medida
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     */
    public function uniqueMedidaCategoria($attribute, $params) {
        if (!empty($this->attributes['cantidad_g']) && $attribute == "cantidad_g") {
            if ($this->attributes['cantidad_g']) {
                $bool = $this->obtenerTodasMedidasCategoria($this->attributes['categoria_id'], $this->attributes['cantidad_g']);
                if ($bool == true) {
                    $this->addError($attribute, 'Ya existe esta medida para esta categor&iacute;a');
                }
            }
        }
    }

    /**
     * Compara las medidas de dicha categoria para buscar si ya existe la nueva a ingresar
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @param int $id id categoria
     * @param String $porcion porcion en gramos para la medida
     * @return boolean true: ya existe, false es nueva
     */
    public function obtenerTodasMedidasCategoria($id, $porcion) {
        $medidas = Medidas::model()->findAll(array('condition' => 'categoria_id=:idcategoria', "params" => array(':idcategoria' => $id)));
        foreach ($medidas as $value) {
            if ((float) $value->cantidad_g == (float) $porcion) {
                return true;
            }
        }
        return false;
    }

}
